package cn.zebra.dev.product.module.sku.service;

import cn.zebra.dev.ibatis.plus.service.IService;
import cn.zebra.dev.product.module.sku.entity.ProductSkuEntity;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Future;

/**
 * @author runnable@sina.cn
 */
public interface ProductSkuService extends IService<ProductSkuEntity> {
    /**
     * 根据商品sku表主键id查找商品sku对象
     *
     * @param productSkuId 商品sku表Id
     * @return 商品sku对象
     */
    @Override
    ProductSkuEntity findById(Long productSkuId);

    /**
     * 根据商品SkuId查询对应规格单价
     *
     * @param productSkuId 商品Sku Id
     * @return 单价
     */
    BigDecimal findUnitPriceByProductSkuId(Long productSkuId);

    /**
     * 异步保存商品SKU对象
     *
     * @param entity 商品SKU对象
     * @return 异步回调
     */
    Future<Boolean> asyncSave(ProductSkuEntity entity);

    /**
     * 批量线程保存
     *
     * @param entityList 商品分类集合
     * @return 成功返回true 保存失败返回false
     */
    @Override
    boolean saveBatch(Collection<ProductSkuEntity> entityList);

    /**
     * 保存商品Sku信息
     *
     * @param productId 商品id
     * @param list      商品Sku列表
     * @param createId  创建人
     * @return 保存成功返回True 失败返回False
     */
    Boolean save(Long productId, List<ProductSkuEntity> list, Long createId);

    /**
     * 修改商品Sku信息
     *
     * @param productId 商品id
     * @param list      商品Sku列表
     * @param updateId  修改人id
     * @return 修改成功返回True 失败返回False
     */
    Boolean update(Long productId, List<ProductSkuEntity> list, Long updateId);

    /**
     * 根据商品id查找所有的SKU信息
     *
     * @param productId 商品id
     * @return SKU集合
     */
    List<ProductSkuEntity> findListByProductId(Long productId);

    /**
     * 根据id集合查找多个sku对象集合
     *
     * @param ids 表id集合
     * @return sku对象集合
     */
    List<ProductSkuEntity> findByIds(Collection<Long> ids);

    /**
     * 根据product_id集合查找多个sku对象集合
     *
     * @param productIds 商品id集合
     * @return sku对象集合
     */
    List<ProductSkuEntity> findListByProductIds(Collection<Long> productIds);
}
